﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace QuanLyBanVeXe
{
    public partial class Login : Form
    {
        string match = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
        public SqlConnection myConnection;
        public SqlCommand myCommand;
        private DataTable dt = new DataTable();
        private SqlDataAdapter da = new SqlDataAdapter();
        public Login()
        {
            InitializeComponent();
        }
        public void KetNoi()
        {
            string strconnect = @"server=.\SQLEXPRESS; database=QuanLyBanVeXe; integrated security=true";
            myConnection = new SqlConnection(strconnect);
            myCommand = myConnection.CreateCommand();
        }
        private void Login_Load(object sender, EventArgs e)
        {
            KetNoi();
            this.AcceptButton = btOK;

        }
        public bool KiemTraQuyen()
        {

            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select Quyen from TaiKhoan
                                            where(TenTK=@TenTK)";
            myCommand.Parameters.Add("@TenTK", SqlDbType.NVarChar, 50).Value = txtName.Text;
            da.SelectCommand = myCommand;
            da.Fill(dt);
            bool kq = false;
            try
            {
                if (dt.Rows[1][3].ToString() == "Admin")
                {
                    kq = true;

                }
            }
            catch { }
            return kq;
        }
        public bool KiemTraDangNhap()
        {

            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select * from TaiKhoan
                                            where(TenTK=@TenTK)
                                            And (MatKhau=@MatKhau)";
            myCommand.Parameters.Add("@TenTK", SqlDbType.NVarChar, 50).Value = txtName.Text;
            myCommand.Parameters.Add("@MatKhau", SqlDbType.NVarChar, 30).Value = txtPass.Text;
            da.SelectCommand = myCommand;
            da.Fill(dt);
            bool kq = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i][0].ToString().Trim() == txtName.Text && dt.Rows[i][1].ToString().Trim() == txtPass.Text)
                {
                    kq = true;
                    break;
                }

            }
            return kq;
        }

        private void btOK_Click(object sender, EventArgs e)
        {
            if (txtName.Text.Trim().Length != 0)
            {
                if (txtPass.Text.Trim().Length == 0)
                {
                    MessageBox.Show("Bạn chưa nhập mật khẩu!", "Thông báo", MessageBoxButtons.OK);
                    txtPass.Focus();
                }
                else
                {

                    if (KiemTraDangNhap())
                    {
                        if (KiemTraQuyen())
                            FormMain.Quyen = "Admin";
                        else
                            FormMain.Quyen = "Guest";
                        this.Hide();
                        FormMain.Username = txtName.Text;
                        FormDoiMatKhau.Username = txtName.Text;
                        FormMain frm = new FormMain();
                        frm.Show();

                    }
                    else
                    {
                        if (MessageBox.Show("Tài khoản hoặc mật khẩu không đúng, Bạn có muốn đăng nhập lại không?", "Đăng nhập thất bại", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            txtName.Focus();
                        }
                        else
                        {
                            Close();
                            Application.Exit();
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Tài khoản không được để trống!", "Thông báo", MessageBoxButtons.OK);
                txtName.Focus();
            }
        }

        private void btHuy_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void lblDangKy_Click(object sender, EventArgs e)
        {
            gbDangKy.Visible = true;
            this.txtTenDN.Focus();
        }
        public bool KiemTraTenDangKy()
        {

            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select * from TaiKhoan
                                            where(TenTK=@TenTK)";
            myCommand.Parameters.Add("@TenTK", SqlDbType.NVarChar, 50).Value = txtTenDN.Text;
            da.SelectCommand = myCommand;
            da.Fill(dt);
            bool kq = true;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i][0].ToString() == txtTenDN.Text)
                {
                    kq = false;
                    break;
                }

            }
            return kq;
        }
        public bool KiemTraEmail()
        {

            myCommand = new SqlCommand();
            myCommand.Connection = myConnection;
            myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = @"select * from TaiKhoan
                                            where(Email=@Email)";
            myCommand.Parameters.Add("@Email", SqlDbType.NVarChar, 50).Value = txtEmail.Text;
            da.SelectCommand = myCommand;
            da.Fill(dt);
            bool kq = true;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i][2].ToString() == txtEmail.Text)
                {
                    kq = false;
                    break;
                }

            }
            return kq;
        }
        private void btDongY_Click(object sender, EventArgs e)
        {

            Regex reg = new Regex(match);
            if (this.txtTenDN.Text.Trim().Length == 0)
            {

                this.txtTenDN.Focus();
                MessageBox.Show("Chưa nhập tên tài khoản", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            else
                if (this.txtMatKhau.Text.Trim().Length == 0) //|| this.txtMatKhau.Text.Trim().Length < 6)
                {

                    this.txtMatKhau.Focus();
                    MessageBox.Show("Nhập mật khẩu từ 6 ký tự trở lên", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                else
                    if (this.txtMatKhau.Text.CompareTo(txtNhapLaiMatKhau.Text) != 0)
                    {
                        this.txtNhapLaiMatKhau.Focus();
                        MessageBox.Show("Nhập mật khẩu không trùng nhau", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                        if (this.txtEmail.Text.Trim().Length == 0)
                        {
                            this.txtEmail.Focus();
                            MessageBox.Show("Nhập Email", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                        else

                            if (!reg.IsMatch(this.txtEmail.Text))
                            {
                                this.txtEmail.Focus();
                                MessageBox.Show("Email không hợp lệ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }

                            else
                            {
                                try
                                {

                                    if (KiemTraTenDangKy())
                                    {
                                        if (KiemTraEmail())
                                        {
                                            if (this.myConnection.State == ConnectionState.Closed)
                                                this.myConnection.Open();
                                            myCommand.CommandText = "insert into TaiKhoan values (N'" + txtTenDN.Text + "','" + txtMatKhau.Text + "','" + txtEmail.Text + "','Guest')";
                                            myCommand.ExecuteNonQuery();
                                            myConnection.Close();
                                            MessageBox.Show("Đăng ký tài khoản thành công");
                                            btHuyBo_Click(sender, e);
                                        }
                                        else
                                        {
                                            lblThongBao.Text = "Email này đã được sử dụng đăng ký";
                                        }
                                    }
                                    else
                                    {
                                        lblThongBao.Text = "Tên tài khoản đã tồn tại";

                                    }
                                }
                                catch { MessageBox.Show("Đăng ký không thành công!"); }
                            }

        }

        private void btHuyBo_Click(object sender, EventArgs e)
        {
            gbDangKy.Visible = false;
        }

        private void txtTenDN_TextChanged(object sender, EventArgs e)
        {
            lblThongBao.Text = "";
        }





    }
}
